/*************************************************************************
	> File Name: datatype.h
	> Author: Maureen 
	> Mail: 1437867946@qq.com 
	> Created Time: Wed 12 May 2021 04:32:10 PM CST
 ************************************************************************/

#ifndef _DATATYPE_H
#define _DATATYPE_H
//==========球员相关=========
//在球场中的点
struct Point {
    int x;
    int y;
};
extern int MAX; //每队球员数量
//球员信息
struct User {
    int team; // 0 RED  1 BLUE
    int fd; //该玩家对应的连接 使用UDP建立伪连接
    char name[20];
    int online;// 1 在线 0 不在线
    int flag; //未响应次数，心跳时每心跳一次，flag--
    //int score;
    char real_name[20];
    char chat_name[20];
    char id[50];
    char ip[20];
    char phone[20];
    //int test[20]; //测试点
    char class[20];
    struct Point loc;
};


//=========球相关=============
////Ball的位置
struct Bpoint{
    double x;
    double y;
};

//移动速度
struct Speed{
    double x;
    double y;
};

//加速度
struct Aspeed{
    double x;
    double y;
};

//Ball的状态
struct BallStatus{
    struct Speed v;
    struct Aspeed a;
    int who;//which队伍
    char name[20]; //球员名称
};

//得分
struct Score{
    int red;
    int blue;
};

//==================数据交互相关
//登录相关的   http协议
struct  LoginRequest { //登录请求
    char name[20];
    int team;
    char msg[512];
};

struct LoginResponse{ //登录回复
    int type; // 0 OK 1 NO
    char msg[512];
};
//游戏期间交互
#define MAX_MSG 4096
//日常的消息交互，如聊天信息，统一为512长度

#define ACTION_KICK 0x01
#define ACTION_CARRY 0x02
#define ACTION_STOP 0x04
#define ACTION_DFT  0x08 //球员在球场中跑动

struct Ctl {
    int action; //ACTION_KICK
    int dirx;
    int diry;
    int strength; //踢球力度 
};

#define FT_FIN 0x100 //离场
#define FT_HEART 0x01 //心跳
#define FT_ACK 0x08 //ack
#define FT_MSG 0x04 //聊天
#define FT_WALL 0x02 //公告
#define FT_CTL 0x10 //控制信息
#define FT_MAP 0x20 //游戏场景数据
#define FT_SCORE 0x40 //比分变化
#define FT_GAMEOVER 0x80 //gameover
#define FT_FIN 0x100 //离场
struct FootBallMsg{
    int type;  // type & FT_HEART 
    int size;
    int team;
    char name[20];
    char msg[MAX_MSG];
    struct Ctl ctl;
};

//================球场数据
struct Map{
    int width;
    int height;
    struct Point start;
    int gate_width;
    int gate_height;
};

#endif
